package com.bdqn.oa.dao;

import com.bdqn.oa.entity.Workplan;
import com.bdqn.oa.entity.Workreport;

import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;

/**
 * @author Zhouxw
 * @date 2022/7/20 18:14
 */
public interface WorkplanDao {
    /**
     * 新增一条工作计划数据
     *
     * @param workplan 工作计划
     * @return 影响行数
     */
    int saveWorkplan(Workplan workplan) throws SQLException;

    /**
     * 更新工作计划数据(主要更新状态和点评id)
     *
     * @param workplan 工作计划
     * @return 影响行数
     */
    int updateWorkplan(Workplan workplan);

    /**
     * 根据员工id和日期更新工作计划状态
     * 状态 1.已保存2.已提交3.已通过 4.已驳回
     * **注意参数为LocalDate类型,注意参数为LocalDate类型,注意参数为LocalDate类型**
     *
     * @param employeeId 员工id
     * @param date       日期
     * @param status     状态
     * @return 影响行数
     */
    int updateStatus(Integer employeeId, LocalDate date, Integer status) throws SQLException;

    /**
     * 根据员工id和日期更新工作计划点评
     * **注意参数为LocalDate类型,注意参数为LocalDate类型,注意参数为LocalDate类型**
     *
     * @param employeeId 员工id
     * @param date       日期
     * @param commentId  点评id
     * @return 影响行数
     */
    int updateComment(Integer employeeId, LocalDate date, Integer commentId) throws SQLException;

    /**
     * 通过workplan_id更新某一条计划的完成状态
     * 1.未完成 2.已完成
     *
     * @param id         计划id
     * @param finishFlag 完成状态
     * @return 影响行数
     */
    int updateFinishFlag(Integer id, Integer finishFlag) throws SQLException;

    /**
     * 通过id查询工作计划
     *
     * @param id 工作计划id
     * @return 工作计划
     */
    Workplan getWorkplanById(Integer id) throws SQLException;

    /**
     * 通过时间范围查询及员工id查询工作计划
     * 查询某一天工作工作计划需要startDate==endDate
     * **注意参数为LocalDate类型,注意参数为LocalDate类型,注意参数为LocalDate类型**
     *
     * @param startDate  起始时间
     * @param endDate    结束时间
     * @param employeeId 员工id
     * @return 工作计划集合
     * @throws SQLException 数据库异常
     */
    List<Workplan> listWorkplanByDateScope(LocalDate startDate, LocalDate endDate, Integer employeeId) throws SQLException;

}
